// 定义链表结构
#ifndef LINKED_LIST_H
#define LINKED_LIST_H

struct LinkedList
{
    // 数据域，void* 类型指针支持存储任意类型的数据
    void *listData;
    // 指针域，指向下一个节点
    struct LinkedList *listNext;
};

/**
 * 指向链表节点的指针类型
 *
 * 简化后续代码中指针变量的声明（例如用ListPointer head代替struct LinkedList *head）
 */
typedef struct LinkedList *ListPointer;

/**
 * 链表初始化
 */
ListPointer LinkedListInit(void *data);

/**
 * 链表数据打印
 */
void LinkedListPrint(ListPointer headPointer, void (*pointerStr)(ListPointer));

/**
 * 添加链表节点
 */
int LinkedListAdd(ListPointer headPointer, void *data);

/**
 * 链表节点计数
 */
int LinkedListCount(ListPointer headPointer);

/**
 * 链表释放
 */
void LinkedListFree(ListPointer headPointer);

#endif